package progen.output.plugins;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Plugin que calcula que elemento de todos los añadidos está justo en el medio.
 * @author jirsis
 * @since 2.0
 *
 */
public class Median implements Plugin {
	
	
	/** Elementos de los que se calculará la mediana. */
	@SuppressWarnings("unchecked")
	private List<Comparable> medianCollection;

	/**
	 * Constructor por defecto.
	 */
	public Median(){
		initialValue();
	}
	
	@SuppressWarnings("unchecked")
	public void addValue(Comparable value) {
		medianCollection.add(value);
		
	}

	/**
	 * Devuelve el elemento que está en la posición de la mitad de la colección, o en 
	 * la inmediatamente inferior en caso de que el número de elementos sea impar.
	 */
	@SuppressWarnings("unchecked")
	public Object getValue() {
		Collections.sort(medianCollection);
		Object value=null;
		if(medianCollection.size()>0){
			value=medianCollection.get((int)(medianCollection.size()/2 - 1));
		}
		return value;
	}
	
	

	@SuppressWarnings("unchecked")
	public void initialValue() {
		medianCollection=new ArrayList<Comparable>();
	}

	public String getName() {
		return "median";
	}

	public int getPriority() {
		return 0;
	}
	
	public void initPlugin(String propertyFamily) {
		//do nothing
	}
	
	public Plugin getPlugin(String name){
		Plugin plugin;
		if(getName().compareTo(name)==0){
			plugin=this;
		}else{
			plugin=new NullPlugin();
		}
		return plugin;
	}

	public void checkDependeces(List<Plugin> pluginCollection) {
		// do nothing
	}


}
